/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.apli.haiam.ejb.interfaces;

import com.apli.ejb.interfaces.AdministradorLoginBase;
import java.util.List;
import javax.ejb.Local;
import org.apli.haiam.admin.entidades.UsuarioAdmin;
import org.apli.haiam.ejb.entidades.AdmDatosGlobales;
import org.apli.haiam.ejb.entidades.AdmMenu;
import org.apli.haiam.ejb.entidades.AdmSesion;
import org.apli.haiam.ejb.entidades.AdmSistema;

/**
 * Contiene los métodos necesarios para iniciar una sesión en el sistema. <p>
 * <H6>Soporte:HAIAM
 * <I>david_s_1086@hotmail.com,david.carranza@haiam.gob.ec</I></H6>
 * @author david Carranza
 * @version 1.0 30/07/2014
 */
@Local
public interface AdministradorLoginHaiam extends AdministradorLoginBase{

 /**
     * Valida las credenciales para iniciar una sesión.
     *
     * @param username nombre de usuario en el sistema, normalmente debe ser la
     * del Directorio Activo
     * @param password contraseña del usuario, normalmente debe ser la del
     * Directorio Activo
     * @param ip la dirección IP del host cliente
     * @param host host cliente
     * @param sistema sistema desde el cual se inicia una sesión
     * @param sistemaPrincipal
     * @param idSesion
     * @return el objeto usuario con todos los perfiles y datos
     * @throws Exception si existe un error
     */
    public Object iniciarSesion(String username, String password, String ip, String host, AdmSistema sistema, AdmSistema sistemaPrincipal, String idSesion) throws Exception;

    /**
     * Obtienen una liste de menus y submenus de todo el sistema.
     *
     * @return la lista de menu y sus respectivos submenus.
     * @throws Exception
     */
    public List<AdmMenu> getMenu() throws Exception;

    public List<AdmMenu> getMenuPorSistemaAsignados(AdmSistema sistema) throws Exception;

    public List<AdmMenu> getMenusPorSistemaNoAsignados(AdmSistema sistema) throws Exception;

    public AdmSesion getSesion(String sesion) throws Exception;

    /**
     * Valida las credenciales para iniciar una sesión.
     *
     * @param token
     * @param ip la dirección IP del host cliente
     * @param host
     * @param sistema sistema desde el cual se inicia una sesión
     * @param datosGlobales especificamente para este sistema las impresoras
     * registradas
     * @param sistemaPrincipal
     * @return el objeto usuario con todos los perfiles y datos
     * @throws Exception si existe un error
     */
    public Object iniciarSesionToken(AdmSesion token, String ip, String host, AdmSistema sistema, AdmSistema sistemaPrincipal, List<AdmDatosGlobales> datosGlobales) throws Exception;

    public List<AdmMenu> getMenuBase(AdmSistema sistema) throws Exception;

    /**
     * Verifica si existe un usuario en el Directorio Activo.
     *
     * @param username el nombre de usuario a buscar
     * @param user el usuario con permisos en el Directorio Activo
     * @return true si existe, caso contrario false
     */
    public boolean existeUsuarioAD(String username, Object user);

    /**
     * Obtiene un usuario del sistema correspondiente a un nombre de usuario.
     *
     * @param username nombre de usuario
     * @param usuario el usuario con permisos en el Directorio Activo
     * @return el usuario del sistema, null si no existe o el usuario no tiene
     * los permisos en el Directorio Activo
     * @throws java.lang.Exception
     */
    public UsuarioAdmin getUsuario(String username, UsuarioAdmin usuario) throws Exception;

    /**
     * Verifica si un usuario se autentica en el Directorio Activo.
     *
     * @param username nombre de usuario
     * @param password contraseña
     * @return true si se autentica, caso contrario false
     */
    public boolean isUsuarioAD(String username, String password);

    /**
     * Valida las credenciales para iniciar una sesión.
     *
     * @param token
     * @param bpmId
     * @return el objeto usuario con todos los perfiles y datos
     * @throws Exception si existe un error
     */
    public Object iniciarSesionBpm(AdmSesion token, String bpmId) throws Exception;
}
